From 618b1a8b33398213541888d81ee5788017415f42 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 13 Dec 2010 12:44:29 +0100 Subject: [PATCH] GtkCssProvider: Make selectors applying from the topmost widget rank higher For example, for an entry within a notebook, previously these 2 rules would have the same weight: .entry {} .notebook {} Now ".entry" will rank higher than ".notebook" for the GtkEntry, further specific selectors such as: .notebook .entry {} still get a higher score than the previous ones. --- gtk/gtkcssprovider.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 0e1f8af914..02356f4fa0 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -1150,7 +1150,7 @@ compare_selector (GtkWidgetPath *path, SelectorPath *selector) { GSList *elements = selector->elements; - gboolean match = TRUE; + gboolean match = TRUE, first = TRUE, first_match = FALSE; guint64 score = 0; gint i; @@ -1165,6 +1165,9 @@ compare_selector (GtkWidgetPath *path, match = compare_selector_element (path, i, elem, &elem_score); + if (match && first) + first_match = TRUE; + /* Only move on to the next index if there is no match * with the current element (whether to continue or not * handled right after in the combinator check), or a @@ -1197,6 +1200,8 @@ compare_selector (GtkWidgetPath *path, score <<= 4; score |= elem_score; } + + first = FALSE; } /* If there are pending selector @@ -1208,6 +1213,13 @@ compare_selector (GtkWidgetPath *path, if (!match) score = 0; + else if (first_match) + { + /* Assign more weight to these selectors + * that matched right from the first element. + */ + score <<= 4; + } return score; } -- 2.30.2